/**
 * 两数之和   ，找寻数组中某两个数的和是目标值的，两个的下标
 * 输入 numbers[]  = [2,7,11,15], target = 9 ;
 * 输出 [1,2]
 * 解释   2 与 7 的和是9，因此 index 1 =1 ， index2= 2，返回即可
 */

public class LeetCode167 {

    public static void main(String[] args) {
        int[] targetTwoSumIndex = findTargetTwoSumIndex(new int[]{2, 7, 11, 15}, 9);
        System.out.println(targetTwoSumIndex[0]);
        System.out.println(targetTwoSumIndex[1]);
    }
//## 左右指针
// 结果比目标，小了要变大，左指针右移+
// 结果比目标，大了要变小，右指针左移-
    public static int[] findTargetTwoSumIndex(int[] numbers, int target) {
        //数组首位 左指针
        int left = 0;
        //数组末尾 右指针
        int right = numbers.length - 1;
        int sum = numbers[left] + numbers[right];
        while (left < right) {
            if (target == sum) {
                //找到了，就返回两个元素的索引+1，因为他要的是第几个元素 而不是元素的下标，我们下标索引是从0开始所以要+1
                return new int[]{left + 1, right + 1};
            } else if (target < sum) {
                //说明 两个数的和大于目标，右指针指的数太大了，要小一点，就往左移动
                right--;
            } else if (target > sum) {
                //说明 两个数的小雨目标，左指针指的数太小了，要大一点，就往右移动
                left++;
            }
        }
        //如果没找到 就直接返回都为-1
        return new int[]{-1, -1};
    }
}
